import CryptoJS from "crypto-js";

// 和java 后台配套，如果改了前端，后台也需要改.
const CBCKEY = CryptoJS.enc.Utf8.parse("jwlnmreFDS@W21dd");
const CBCIV = CryptoJS.enc.Utf8.parse("Ejloiu!@$13sDW11");

/**
 * 加密
 * @param word utf8 的字符串
 * @returns {string} 加密后base64编码的字符串
 */
export function encryptCbc(word) {
  // 将utf8字符转为字节数组.
  const src = CryptoJS.enc.Utf8.parse(word);
  // 加密模式为CBC，补码方式为PKCS5Padding（也就是PKCS7）
  const encrypted = CryptoJS.AES.encrypt(src, CBCKEY, {
    iv: CBCIV,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  });

  //返回base64
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
/**
 * 解密
 * @param word base64 编码的字符串
 * @returns {string} 解密后的字符串 utf8 编码
 */
export function decryptCbc(word) {
  if (!word) {
    return "";
  }
  // 解密模式为CBC，补码方式为PKCS5Padding（也就是PKCS7）
  const decrypt = CryptoJS.AES.decrypt(word, CBCKEY, {
    iv: CBCIV,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7,
  });

  return decrypt.toString(CryptoJS.enc.Utf8);
}

/**
 * 解密 对 ENC: 开始的字符进行解密
 * @param word base64 编码的字符串
 * @returns {string} 解密后的字符串 utf8 编码
 */
export function decryptCbcEnv(word) {
  if (!word || !word.startsWith("ENC:")) {
    return word;
  }
  return decryptCbc(word.substring(4));
}
